iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
自我挑戰組

用Python學習網路爬蟲30天系列 第 22

[Day22] Scrapy爬蟲框架4_檔案輸出

  • 分享至 

  • xImage
  •  

Scrapy專案的檔案輸出

資料輸出的方式有兩種,一種是用scrapy crawl指令來輸出爬取的資料,另一種是在專案中的pipelines.py和settings.py檔案來設定輸出資料的檔案格式。

  • scrapy crawl指令

    scrapy crawl 檔案名稱 -o 檔案名稱.json
    scrapy crawl 檔案名稱 -o 檔案名稱.csv
    scrapy crawl 檔案名稱 -o 檔案名稱.xml
    
  • pipelines.py和settings.py檔案

    (1) pipelines.py檔案: 可以定義類別來指定匯出的檔案格式

    from scrapy.exporters import JsonItemExporter
    
    class JsonPipeline:
      def __init__(self):    #建立json檔案用JsonItemExporter物件匯入資料
          self.file = open('pttstock2.csv', 'wb')
          self.exporter = JsonItemExporter(self.file, encoding='big5')
          self.exporter.start_exporting()
    
      def process_item(self, item, spider):   #在item中擷取的資料匯入json檔案
          self.exporter.export_item(item)
          return item
    
      def close_spider(self, spider):  #資料匯出後關閉檔案
          self.exporter.finish_exporting()
          self.file.close()
    


    (2) settings.py檔案: 指定的Pipeline類別加入ITEM_PIPELINES中

    ITEM_PIPELINES = {
       'Stock.pipelines.StockPipeline': 300,
       'Stock.pipelines.CsvPipeline': 500,
    }
    

實作練習

將爬取批批踢股票版的資料擷取後存入檔案。

  1. scrapy crawl指令: 輸出成json格式的檔案
    注意!!!在settings.py檔案中指定使用的編碼以免輸出中文字時會出現亂碼

    #使用編碼
    FEED_EXPORT_ENCODING = "utf-8"
    

    https://ithelp.ithome.com.tw/upload/images/20221006/201521809OnHArCpTz.png
    https://ithelp.ithome.com.tw/upload/images/20221006/20152180djDEGMigGE.png

  2. pipelines.py和settings.py檔案: 設定輸出成csv格式的檔案
    (1) pipelines.py檔案: 加入CsvPipeline類別來定義匯出資料到csv檔案的流程

    from scrapy.exporters import CsvItemExporter
    
    class CsvPipeline:
    def __init__(self):    #建立csv檔案用CsvItemExporter物件匯入資料
        self.file = open('pttstock2.csv', 'wb')
        self.exporter = CsvItemExporter(self.file, encoding='big5')
        self.exporter.start_exporting()
    
    def process_item(self, item, spider):   #在item中擷取的資料匯入csv檔案
        self.exporter.export_item(item)
        return item
    
    def close_spider(self, spider):  #資料匯出後關閉檔案
        self.exporter.finish_exporting()
        self.file.close()
    


    (2) settings.py檔案: 把CsvPipeline加入到ITEM_PIPELINES中

    ITEM_PIPELINES = {
       'Stock.pipelines.StockPipeline': 300,
       'Stock.pipelines.CsvPipeline': 500,
    }
    

    輸出時使用指令:

    scrapy crawl 檔案名稱
    

    https://ithelp.ithome.com.tw/upload/images/20221006/20152180mMvs0NQIoH.png

    https://ithelp.ithome.com.tw/upload/images/20221006/20152180yxIiU87Zs4.png


上一篇
[Day21] Scrapy爬蟲框架3_Item和Item Pipeline
下一篇
[Day 23] Scrapy 總複習
系列文
用Python學習網路爬蟲30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言